package muhnes.sizoo.controlador;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import muhnes.sizoo.dal.EspecimenDao;
import muhnes.sizoo.dal.EspecimenDaoImpl;
import muhnes.sizoo.modelo.Especimen;
import muhnes.sizoo.dal.AnimalDao;
import muhnes.sizoo.dal.AnimalDaoImpl;
import muhnes.sizoo.modelo.Animal;
import muhnes.sizoo.dal.RecoleccionDao;
import muhnes.sizoo.dal.RecoleccionDaoImpl;
import muhnes.sizoo.modelo.Recoleccion;
import muhnes.sizoo.dal.AcuaticoDao;
import muhnes.sizoo.dal.AcuaticoDaoImpl;
import muhnes.sizoo.modelo.Acuatico;
import muhnes.sizoo.dal.TerrestreDao;
import muhnes.sizoo.dal.TerrestreDaoImpl;
import muhnes.sizoo.modelo.Terrestre;

/**
 *
 * @author CALDERON
 */
@ManagedBean(name = "especimenBean")
@ViewScoped

public class EspecimenBean implements Serializable{
    private Acuatico acuatico;
    private Especimen especimen;
    private Terrestre terrestre;
    
    private List<Acuatico> listaAcuaticos;
    private List<Especimen> listaEspecimens;
    private List< SelectItem > itemsEspecimen;
    private List< SelectItem > listaAnimal;
    private List< SelectItem > listaRecoleccion;

    /** Creates a new instance of AnimalBean */
    public EspecimenBean() {
        AcuaticoDao daoAcuatico = new AcuaticoDaoImpl();
        EspecimenDao dao= new EspecimenDaoImpl();
        TerrestreDao daoTerrestre = new TerrestreDaoImpl();
        acuatico = new Acuatico();
        especimen= new Especimen();
        terrestre = new Terrestre();
        listaAcuaticos = daoAcuatico.buscarTodos();
        listaEspecimens = dao.buscarTodos();
        
    }

    public Especimen getEspecimen() {
        return especimen;
    }

    public void setEspecimen(Especimen especimen) {
        this.especimen = especimen;
    }

    public Acuatico getAcuatico() {
        return acuatico;
    }

    public void setAcuatico(Acuatico acuatico) {
        this.acuatico = acuatico;
    }
    
    public Terrestre getTerrestre() {
        return terrestre;
    }

    public void setTerrestre(Terrestre terrestre) {
        this.terrestre = terrestre;
    }
    public List< Especimen > getListaEspecimens() {
        if( listaEspecimens == null ) {
            EspecimenDao dao = new EspecimenDaoImpl();
            listaEspecimens = dao.buscarTodos();
        }
        return listaEspecimens;
    }
    
    public void prepararAdicion( ActionEvent event  ){
        acuatico = new Acuatico();
        especimen = new Especimen();
        terrestre = new Terrestre();
    }
    
    public void prepararModificacion(Especimen especimen ){
        this.especimen = especimen;
    }
    public void prepararEliminacion(Especimen especimen ){
        this.especimen = especimen;
    }

    
    public void agregarEspecimen( ActionEvent event ){
        boolean tipo;
        tipo = false;
        EspecimenDaoImpl dao = new EspecimenDaoImpl();
        AcuaticoDaoImpl daoAcuatico = new AcuaticoDaoImpl();
        TerrestreDaoImpl daoTerrestre = new TerrestreDaoImpl();
        especimen.setEstado("Habilitado");
        especimen.setUbicacionalmacen("gaveta 25");
        especimen.setDonacion(true);
        especimen.setTipoespecimen('T');
         dao.guardar( especimen );
        if (tipo == true){
            
            terrestre.setCodigoespecimen(especimen.getCodigoespecimen());
            daoTerrestre.guardar(terrestre);
            
        }
        else {
             
              especimen.setTipoespecimen('A');
              acuatico.setCodigoespecimen(especimen.getCodigoespecimen());
              daoAcuatico.guardar(acuatico);
            };
        
        recrearModelo();
    }
    public void actualizarEspecimen( ActionEvent event ){
        EspecimenDaoImpl dao = new EspecimenDaoImpl();
        dao.actualizar( especimen );
        recrearModelo();
    }
    
    public void eliminarEspecimen(  ActionEvent event ){
        EspecimenDaoImpl dao = new EspecimenDaoImpl();
        especimen.setEstado("Deshabilitado");
        dao.eliminar( especimen );
        recrearModelo();
    }
        
    public List< SelectItem > getItemsEspecie() {
        if( itemsEspecimen == null ) {
            itemsEspecimen = new ArrayList< SelectItem >();
            EspecimenDao dao = new EspecimenDaoImpl();
            for( Especimen especimen : dao.buscarTodos() ) {
                SelectItem item = new SelectItem( especimen, especimen.getCodigoespecimen());
                
                itemsEspecimen.add( item );
            }
        }
        return itemsEspecimen;
    }
    
     public List< SelectItem > getListaAnimal() {
        if( listaAnimal == null ) {
            listaAnimal = new ArrayList< SelectItem >();
            AnimalDao dao = new AnimalDaoImpl();
            for( Animal animal : dao.buscarTodos() ) {
                SelectItem item = new SelectItem( animal, animal.getNombrecientifico() );
                listaAnimal.add( item );
            }
        }
        return listaAnimal;
    }
    public List< SelectItem > getListaRecoleccion() {
        
        java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("dd/MM/yyyy");
        
        if( listaRecoleccion == null ) {
            listaRecoleccion = new ArrayList< SelectItem >();
            RecoleccionDao dao = new RecoleccionDaoImpl();
            for( Recoleccion recoleccion : dao.buscarTodos() ) {
                SelectItem item = new SelectItem( recoleccion, sdf.format(recoleccion.getFecharecoleccion()) );
                listaRecoleccion.add( item );
            }
        }
        return listaRecoleccion;
    }
    
    void recrearModelo() {
        listaEspecimens = null;
    
    }   
}
